"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/2/18 8:47
@Description : lambda函数的使用
"""
numer_list = [1, 2, 3, 4]

# 将numer_list中的元素*2 放在新列表中
'''
方式1 遍历列表
numer_list_new = []
for num in numer_list:
    numer_list_new.append(num * 2)
print(f'新列表={numer_list_new}')
'''

'''
# 列表推导式
numer_list_new = [num * 2 for num in numer_list]
print(numer_list_new)
'''


#  内置函数  map(function,iterable)
def fn(num):
    return num * 2


result = map(fn, numer_list)
numer_list_new = list(result)
print(numer_list_new, type(numer_list_new))

# 以上fn函数的定义 只在map遍历时作为参数进行使用，则后续可以通过匿名函数的定义实现  lambda函数  匿名函数
'''
 lambda函数的定义语法
 lambda arguments: expression  
'''
'''
lambda_fn = lambda a: a * 2
print(type(lambda_fn))

result = lambda_fn(2)
print(result)
'''

#  将lambda匿名函数作为参数 实现列表元素的运算
result = map(lambda a: a * 2, numer_list)
numer_list_new = list(result)
print(numer_list_new, type(numer_list_new))

#  判定列表中哪些元素是大于2的
result = map(lambda a: a > 2, numer_list)
numer_list_new = list(result)
print(numer_list_new, type(numer_list_new))

#  获取指定列表中大于2的元素  filter
result = filter(lambda a: a > 2, numer_list)
numer_list_new = list(result)

# print(f'result={result}')
print(f'numer_list_new={numer_list_new}')

#  lambda函数 没有参数 arguments可以不写 但是: 不能省略
lambda_fn = lambda: 'hello python'
result = lambda_fn()
print(result)

# lambda函数 有多个参数
lambda_fn = lambda a, b: a + b
result = lambda_fn(2, 3)
print(result)

lambda_fn = lambda a, b: a + b
result = lambda_fn(2, 3)
print(result)

lambda_fn = lambda a, b, c: a + b - c
result = lambda_fn(2, 3, 1)
print(result)

#  lambda函数定义的匿名函数 一般是作为参数进行使用  而且是简单的函数

#  javascript (参数列表) => 表达式  箭头函数    Java lambda表达式   (参数列表)-> 表达式
